'''
药企给cso发包（这个，项目的业务逻辑本身只能单个发包）
'''

import base64
#from smtpd import Options
import time

from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

from Python.Python.utils.slider_match import calculate_slider_offset
import utils.time_utils as myTime

'''
页面及功能：
cso登录
cso-兼职包的单个发布（成功/名称重复而失败）
'''
#导包/导入函数
from selenium import webdriver#
#from webdriver_manager.chrome import ChromeDriver

#print("for test")#用于验证不是环境的问题：这句打印可以执行出来


#创建浏览器driver，两种方法：
#一、随运行，实时下载，但是容易受到网络影响，速度不稳定
#二、下载驱动到本地，直接通过代码，设置为调用本地驱动

#下载驱动到本地，直接通过代码，设置为调用本地驱动
#初始化 Options 并配置浏览器参数（可选，根据需求添加）
#options = Options()
# 示例：添加常见配置（可选）
#~~~提示：没有add_argument这个选项，可能是环境有点不一样？
#options.add_argument("--start-maximized")  # 最大化窗口
#options.add_argument("--remote-allow-origins=*")

'''
driver配置
华为--start
'''
# driver_path = "D:\SML\chromedriver-win64\chromedriver-win64\chromedriver.exe" # 下载好的驱动文件夹，解压之后里面会有一个**driver.exe，这里填这个文件的位置（华为）
#
# #创建驱动
# driver = webdriver.Chrome(service=Service(driver_path))#需要导入：from selenium.webdriver.chrome.service import Service
'''
--华为end
'''

'''
driver配置
公司第二台电脑--start
'''
driver = webdriver.Chrome()#新版selenium，无需配置driver
'''
--公司第二台电脑end’
'''



driver.maximize_window()

#打开网页
driver.get("https://pre.yaoyi.net/#/login")

#隐式等待，提高稳定性
driver.implicitly_wait(20)


#登录：
#输入账号、密码，点击“登录”
driver.find_element("xpath",'//*[@id="app"]/div[1]/div[1]/div[2]/div/div[1]/form/div[1]/div/div/input').send_keys("18233490001")
driver.find_element("xpath",'//*[@id="app"]/div[1]/div[1]/div[2]/div/div[1]/form/div[3]/div/div/input').send_keys("0000@Aaa")
driver.find_element('xpath','//*[@id="app"]/div[1]/div[1]/div[2]/div/div[1]/form/div[5]/div/button').click()


#验证码界面：TODO整理成单独的文档，方便复用
#获取验证码图片（注意要转换成二进制）
big_ele = driver.find_element("xpath",'/html/body/div[3]/div/div[2]/div/div[1]/div/img')
small_ele = driver.find_element("xpath",'/html/body/div[3]/div/div[2]/div/div[2]/div/div/div/img')
big_src = big_ele.get_attribute("src")
small_src = small_ele.get_attribute("src")
#获取标准的base64编码
# big_base64 = big_src.split(",")[1]
big_src = big_src[big_src.find(',')+1:]#
small_src = small_src[small_src.find(',')+1:]
#写入文件（写入二进制）
#把base64转成二进制文件#import base64
with open('./big.png',mode='wb') as f :#python中的垃圾回收机制
    #先把base64转换成二进制，然后写入文件
    f.write(base64.b64decode(big_src))


with open('./small.png',mode='wb') as f :#python中的垃圾回收机制
    #先把base64转换成二进制，然后写入文件
    f.write(base64.b64decode(small_src))

#控制滑块的按钮
slider = driver.find_element("xpath","/html/body/div[3]/div/div[2]/div/div[2]/div/div")
print("成功获取到控制滑块的按钮")

#计算滑块在网页实际要滑动的距离
distance = calculate_slider_offset("./big.png","./small.png")*(661/617)
ActionChains(driver).drag_and_drop_by_offset(slider, distance, 0).perform()
print("滑块验证通过！！！")
# TODO优化，偶尔的滑块认证失败，可以重新认证
# if is_element_exist(("By.XPATH","/html/body/div[5]/div/div[1]/span")):
#     driver.implicitly_wait(10)
#     print("滑块验证通过！！！")
#     break


#输入验证码，点击登录
print("输入验证码，点击登录")
driver.find_element("xpath", "/html/body/div[5]/div/div[2]/form/div[2]/div/button/span").click()
driver.find_element("xpath", "/html/body/div[5]/div/div[2]/form/div[2]/input").send_keys("5657")
driver.find_element("xpath", "/html/body/div[5]/div/div[3]/span/button").click()
print("可以查找界面元素，查看是否登录成功")

#关闭遮挡
driver.find_element("xpath", '''//*[@id="app"]/div[1]/div[4]/div[1]/div[1]''').click()



#打开【任务管理】
driver.find_element("xpath",'''//*[@id="app"]/div[1]/div[2]/div[1]/div/div[2]/div[1]/div/ul/div/li[6]/div''').click()
print("打开【任务管理】成功")
#点击【企业积分包管理】
driver.find_element(By.XPATH,'''//*[@id="app"]/div[1]/div[2]/div[1]/div/div[2]/div[1]/div/ul/div/li[6]/ul/li[2]''').click()
print("点击【企业积分包管理】成功")
#点击【新增】
driver.find_element(By.XPATH,'''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div/div[1]/div[1]/div/div/div[1]/div/button[1]''').click()
print("点击“新增”——完成")

#输入上游积分包名
ele = driver.find_element(By.XPATH,'''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div/div[2]/div/div[2]/div/form/div[5]/div[1]/div/div/div/input''')
ele.send_keys("SSS上游")#todo这里可以优化：随机生成积分包名
print("输入上游积分包名成功")
input("观察效果1")


#输入上游积分包值
ele = driver.find_element(By.XPATH,'''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div/div[2]/div/div[2]/div/form/div[5]/div[2]/div/div/div/input''')
ele.send_keys("1000")#todo这里可以优化：手动输入积分包值
input("观察效果2")

#下拉
ele = driver.find_element(By.XPATH,'''//*[@id="app"]/div[1]/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div/div/div/div[2]/div/div[2]/div/form/div[7]/div[1]/div/div/div/div[2]/span/span/i''')
ele.click()
#选择下游企业
driver.find_element(By.XPATH,'''/html/body/div[6]/div[1]/div[1]/ul/li[1]''').click()#todo这里可以优化：xpath
input("观察效果3")
